home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / doom / axxwar_1.zip / SOURCES / OGRE.QC < prev    next >
Text File  |  1997-02-21  |  17KB  |  521 lines

  1. // AxxWars 0.7
  2.  
  3. /*
  4. ==============================================================================
  5.  
  6. OGRE
  7.  
  8. ==============================================================================
  9. */
  10.  
  11. $cd id1/models/ogre_c
  12. $origin 0 0 24
  13. $base base        
  14. $skin base
  15.  
  16. $frame    stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  17.  
  18. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7
  19. $frame walk8 walk9 walk10 walk11 walk12 walk13 walk14 walk15 walk16
  20.  
  21. $frame run1 run2 run3 run4 run5 run6 run7 run8
  22.  
  23. $frame swing1 swing2 swing3 swing4 swing5 swing6 swing7
  24. $frame swing8 swing9 swing10 swing11 swing12 swing13 swing14
  25.  
  26. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7
  27. $frame smash8 smash9 smash10 smash11 smash12 smash13 smash14
  28.  
  29. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6
  30.  
  31. $frame pain1 pain2 pain3 pain4 pain5
  32.  
  33. $frame painb1 painb2 painb3
  34.  
  35. $frame painc1 painc2 painc3 painc4 painc5 painc6
  36.  
  37. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
  38. $frame paind11 paind12 paind13 paind14 paind15 paind16
  39.  
  40. $frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
  41. $frame paine11 paine12 paine13 paine14 paine15
  42.  
  43. $frame death1 death2 death3 death4 death5 death6
  44. $frame death7 death8 death9 death10 death11 death12
  45. $frame death13 death14
  46.  
  47. $frame bdeath1 bdeath2 bdeath3 bdeath4 bdeath5 bdeath6
  48. $frame bdeath7 bdeath8 bdeath9 bdeath10
  49.  
  50. $frame pull1 pull2 pull3 pull4 pull5 pull6 pull7 pull8 pull9 pull10 pull11
  51.  
  52. //=============================================================================
  53.  
  54.  
  55. void() OgreGrenadeExplode =
  56. {
  57.     T_RadiusDamage (self, self.owner, 40, world);
  58.     sound (self, CHAN_VOICE, "weapons/r_exp3.wav", 1, ATTN_NORM);
  59.     SoundCheck(self.origin, SC_LONG, self.owner.enemy); // AXXND
  60.  
  61.  
  62.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  63.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  64.     WriteCoord (MSG_BROADCAST, self.origin_x);
  65.     WriteCoord (MSG_BROADCAST, self.origin_y);
  66.     WriteCoord (MSG_BROADCAST, self.origin_z);
  67.  
  68.     self.velocity = '0 0 0';
  69.     self.touch = SUB_Null;
  70.     setmodel (self, "progs/s_explod.spr");
  71.     self.solid = SOLID_NOT;
  72.     s_explode1 ();
  73. };
  74.  
  75. void() OgreGrenadeTouch =
  76. {
  77.     if (other == self.owner)
  78.         return;        // don't explode on owner
  79.     if (other.takedamage == DAMAGE_AIM)
  80.     {
  81.         OgreGrenadeExplode();
  82.         return;
  83.     }
  84.     sound (self, CHAN_VOICE, "weapons/bounce.wav", 1, ATTN_NORM);    // bounce sound
  85.  
  86. // AXXND START
  87.     if (self.count <= 4)  // Only track first four bounces.
  88.     {
  89.         self.count = self.count + 1;
  90.         SoundCheck(self.origin, SC_SHORT, self.owner.enemy);
  91.     }
  92. // AXXND END
  93.  
  94.  
  95.     if (self.velocity == '0 0 0')
  96.         self.avelocity = '0 0 0';
  97. };
  98.  
  99. /*
  100. ================
  101. OgreFireGrenade
  102. ================
  103. */
  104. void() OgreFireGrenade =
  105. {
  106.     local    entity missile, mpuff;
  107.     
  108.     self.effects = self.effects | EF_MUZZLEFLASH;
  109.  
  110.     sound (self, CHAN_WEAPON, "weapons/grenade.wav", 1, ATTN_NORM);
  111.     SoundCheck(self.origin, SC_LONG, self.enemy); // AXXND
  112.  
  113.     missile = spawn ();
  114.     missile.owner = self;
  115.     missile.movetype = MOVETYPE_BOUNCE;
  116.     missile.solid = SOLID_BBOX;
  117.         
  118. // set missile speed    
  119.  
  120.     makevectors (self.angles);
  121.  
  122.     missile.velocity = normalize(self.enemy.origin - self.origin);
  123.     missile.velocity = missile.velocity * 600;
  124.     missile.velocity_z = 200;
  125.  
  126.     missile.avelocity = '300 300 300';
  127.  
  128.     missile.angles = vectoangles(missile.velocity);
  129.     
  130.     missile.touch = OgreGrenadeTouch;
  131.     
  132. // set missile duration
  133.     missile.nextthink = time + 2.5;
  134.     missile.think = OgreGrenadeExplode;
  135.  
  136.     setmodel (missile, "progs/grenade.mdl");
  137.     setsize (missile, '0 0 0', '0 0 0');        
  138.     setorigin (missile, self.origin);
  139. };
  140.  
  141.  
  142. //=============================================================================
  143.  
  144. /*
  145. ================
  146. chainsaw
  147.  
  148. FIXME
  149. ================
  150. */
  151. void(float side) chainsaw =
  152. {
  153. local vector    delta;
  154. local float     ldmg;
  155.  
  156.     if (!self.enemy)
  157.         return;
  158.     if (!CanDamage (self.enemy, self))
  159.         return;
  160.  
  161.     ai_charge(10);
  162.  
  163.     delta = self.enemy.origin - self.origin;
  164.  
  165.     if (vlen(delta) > 100)
  166.         return;
  167.         
  168.     ldmg = (random() + random() + random()) * 4;
  169.     T_Damage (self.enemy, self, self, ldmg);
  170.     
  171.     if (side)
  172.     {
  173.         makevectors (self.angles);
  174.         if (side == 1)
  175.             SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  176.         else
  177.             SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  178.     }
  179. };
  180.  
  181.  
  182. void() ogre_stand1    =[    $stand1,    ogre_stand2    ] {ai_stand();};
  183. void() ogre_stand2    =[    $stand2,    ogre_stand3    ] {ai_stand();};
  184. void() ogre_stand3    =[    $stand3,    ogre_stand4    ] {ai_stand();};
  185. void() ogre_stand4    =[    $stand4,    ogre_stand5    ] {ai_stand();};
  186. void() ogre_stand5    =[    $stand5,    ogre_stand6    ] {
  187. if (random() < 0.2)
  188.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  189. ai_stand();
  190. };
  191. void() ogre_stand6    =[    $stand6,    ogre_stand7    ] {ai_stand();};
  192. void() ogre_stand7    =[    $stand7,    ogre_stand8    ] {ai_stand();};
  193. void() ogre_stand8    =[    $stand8,    ogre_stand9    ] {ai_stand();};
  194. void() ogre_stand9    =[    $stand9,    ogre_stand1    ] {ai_stand();};
  195.  
  196. void() ogre_walk1    =[    $walk1,        ogre_walk2    ] {ai_walk(3);};
  197. void() ogre_walk2    =[    $walk2,        ogre_walk3    ] {ai_walk(2);};
  198. void() ogre_walk3    =[    $walk3,        ogre_walk4    ] {
  199. ai_walk(2);
  200. if (random() < 0.2)
  201.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  202. };
  203. void() ogre_walk4    =[    $walk4,        ogre_walk5    ] {ai_walk(2);};
  204. void() ogre_walk5    =[    $walk5,        ogre_walk6    ] {ai_walk(2);};
  205. void() ogre_walk6    =[    $walk6,        ogre_walk7    ] {
  206. ai_walk(5);
  207. if (random() < 0.1)
  208.     sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);
  209. };
  210. void() ogre_walk7    =[    $walk7,        ogre_walk8    ] {ai_walk(3);};
  211. void() ogre_walk8    =[    $walk8,        ogre_walk9    ] {ai_walk(2);};
  212. void() ogre_walk9    =[    $walk9,        ogre_walk10    ] {ai_walk(3);};
  213. void() ogre_walk10    =[    $walk10,    ogre_walk11    ] {ai_walk(1);};
  214. void() ogre_walk11    =[    $walk11,    ogre_walk12    ] {ai_walk(2);};
  215.  
  216. // AXXFR START
  217. // MODIFIED CODE TO MAKE OGRE TRY TO START CHAINSAW
  218. void() ogre_pull1       =[      $pull1,         ogre_pull2      ] {};
  219. void() ogre_pull2       =[      $pull2,         ogre_pull3      ] {};
  220. void() ogre_pull3       =[      $pull3,         ogre_pull4      ] {};
  221. void() ogre_pull4       =[      $pull4,         ogre_pull5      ] {};
  222. void() ogre_pull5       =[      $pull5,         ogre_pull6      ] {
  223.     sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  224. };
  225. void() ogre_pull6       =[      $pull6,         ogre_pull7      ] {};
  226. void() ogre_pull7       =[      $pull7,         ogre_pull8      ] {};
  227. void() ogre_pull8       =[      $pull8,         ogre_pull9      ] {};
  228. void() ogre_pull9       =[      $pull9,         ogre_pull10     ] {};
  229. void() ogre_pull10      =[      $pull10,        ogre_pull11     ] {};
  230. void() ogre_pull11      =[      $pull11,        ogre_pull12     ] {};
  231. void() ogre_pull12      =[      $pull10,        ogre_pull13     ] {};
  232. void() ogre_pull13      =[      $pull9,         ogre_pull14     ] {};
  233. void() ogre_pull14      =[      $pull8,         ogre_pull15     ] {};
  234. void() ogre_pull15      =[      $pull6,         ogre_pull16     ] {};
  235. void() ogre_pull16      =[      $pull4,         ogre_walk13     ] {};
  236.  
  237. void() ogre_walk12    =[    $walk12,    ogre_check    ] {ai_walk(3);};
  238. void() ogre_walk13    =[    $walk13,    ogre_walk14    ] {ai_walk(3);};
  239. void() ogre_walk14    =[    $walk14,    ogre_walk15    ] {ai_walk(3);};
  240. void() ogre_walk15    =[    $walk15,    ogre_walk16    ] {ai_walk(3);};
  241. void() ogre_walk16    =[    $walk16,    ogre_walk1    ] {ai_walk(4);};
  242.  
  243. // ogre_check is called in ogre_walk12, to determine if he will pull the chain
  244.  
  245. void() ogre_check =
  246.     {
  247.     ai_walk(3);
  248.     if (random() <0.25)
  249.         ogre_pull1 (); 
  250.     else
  251.         ogre_walk13 ();
  252.     };  
  253.  
  254. // AXXFR END
  255.  
  256. // Original code start
  257. // void() ogre_walk12    =[    $walk12,    ogre_walk13    ] {ai_walk(3);};
  258. // void() ogre_walk13    =[    $walk13,    ogre_walk14    ] {ai_walk(3);};
  259. // void() ogre_walk14    =[    $walk14,    ogre_walk15    ] {ai_walk(3);};
  260. // void() ogre_walk15    =[    $walk15,    ogre_walk16    ] {ai_walk(3);};
  261. // void() ogre_walk16    =[    $walk16,    ogre_walk1    ] {ai_walk(4);};
  262. // Original code end
  263.  
  264. void() ogre_run1    =[    $run1,        ogre_run2    ] {ai_run(9);
  265. if (random() < 0.2)
  266.     sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  267. };
  268. void() ogre_run2    =[    $run2,        ogre_run3    ] {ai_run(12);};
  269. void() ogre_run3    =[    $run3,        ogre_run4    ] {ai_run(8);};
  270. void() ogre_run4    =[    $run4,        ogre_run5    ] {ai_run(22);};
  271. void() ogre_run5    =[    $run5,        ogre_run6    ] {ai_run(16);};
  272. void() ogre_run6    =[    $run6,        ogre_run7    ] {ai_run(4);};
  273. void() ogre_run7    =[    $run7,        ogre_run8    ] {ai_run(13);};
  274. void() ogre_run8    =[    $run8,        ogre_run1    ] {ai_run(24);};
  275.  
  276. void() ogre_swing1    =[    $swing1,        ogre_swing2    ] {ai_charge(11);
  277. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  278. };
  279. void() ogre_swing2    =[    $swing2,        ogre_swing3    ] {ai_charge(1);};
  280. void() ogre_swing3    =[    $swing3,        ogre_swing4    ] {ai_charge(4);};
  281. void() ogre_swing4    =[    $swing4,        ogre_swing5    ] {ai_charge(13);};
  282. void() ogre_swing5    =[    $swing5,        ogre_swing6    ] {ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  283. void() ogre_swing6    =[    $swing6,        ogre_swing7    ] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
  284. void() ogre_swing7    =[    $swing7,        ogre_swing8    ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  285. void() ogre_swing8    =[    $swing8,        ogre_swing9    ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  286. void() ogre_swing9    =[    $swing9,        ogre_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  287. void() ogre_swing10    =[    $swing10,        ogre_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
  288. void() ogre_swing11    =[    $swing11,        ogre_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  289. void() ogre_swing12    =[    $swing12,        ogre_swing13 ] {ai_charge(3);};
  290. void() ogre_swing13    =[    $swing13,        ogre_swing14 ] {ai_charge(8);};
  291. void() ogre_swing14    =[    $swing14,        ogre_run1    ] {ai_charge(9);};
  292.  
  293. void() ogre_smash1    =[    $smash1,        ogre_smash2    ] {ai_charge(6);
  294. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  295. };
  296. void() ogre_smash2    =[    $smash2,        ogre_smash3    ] {ai_charge(0);};
  297. void() ogre_smash3    =[    $smash3,        ogre_smash4    ] {ai_charge(0);};
  298. void() ogre_smash4    =[    $smash4,        ogre_smash5    ] {ai_charge(1);};
  299. void() ogre_smash5    =[    $smash5,        ogre_smash6    ] {ai_charge(4);};
  300. void() ogre_smash6    =[    $smash6,        ogre_smash7    ] {ai_charge(4); chainsaw(0);};
  301. void() ogre_smash7    =[    $smash7,        ogre_smash8    ] {ai_charge(4); chainsaw(0);};
  302. void() ogre_smash8    =[    $smash8,        ogre_smash9    ] {ai_charge(10); chainsaw(0);};
  303. void() ogre_smash9    =[    $smash9,        ogre_smash10 ] {ai_charge(13); chainsaw(0);};
  304. void() ogre_smash10    =[    $smash10,        ogre_smash11 ] {chainsaw(1);};
  305. void() ogre_smash11    =[    $smash11,        ogre_smash12 ] {ai_charge(2); chainsaw(0);
  306. self.nextthink = self.nextthink + random()*0.2;};    // slight variation
  307. void() ogre_smash12    =[    $smash12,        ogre_smash13 ] {ai_charge();};
  308. void() ogre_smash13    =[    $smash13,        ogre_smash14 ] {ai_charge(4);};
  309. void() ogre_smash14    =[    $smash14,        ogre_run1    ] {ai_charge(12);};
  310.  
  311. void() ogre_nail1    =[    $shoot1,        ogre_nail2    ] {ai_face();};
  312. void() ogre_nail2    =[    $shoot2,        ogre_nail3    ] {ai_face();};
  313. void() ogre_nail3    =[    $shoot2,        ogre_nail4    ] {ai_face();};
  314. void() ogre_nail4    =[    $shoot3,        ogre_nail5    ] {ai_face();OgreFireGrenade();};
  315. void() ogre_nail5    =[    $shoot4,        ogre_nail6    ] {ai_face();};
  316. void() ogre_nail6    =[    $shoot5,        ogre_nail7    ] {ai_face();};
  317. void() ogre_nail7    =[    $shoot6,        ogre_run1    ] {ai_face();};
  318.  
  319. void()    ogre_pain1    =[    $pain1,        ogre_pain2    ] {};
  320. void()    ogre_pain2    =[    $pain2,        ogre_pain3    ] {};
  321. void()    ogre_pain3    =[    $pain3,        ogre_pain4    ] {};
  322. void()    ogre_pain4    =[    $pain4,        ogre_pain5    ] {};
  323. void()    ogre_pain5    =[    $pain5,        ogre_run1    ] {};
  324.  
  325.  
  326. void()    ogre_painb1    =[    $painb1,    ogre_painb2    ] {};
  327. void()    ogre_painb2    =[    $painb2,    ogre_painb3    ] {};
  328. void()    ogre_painb3    =[    $painb3,    ogre_run1    ] {};
  329.  
  330.  
  331. void()    ogre_painc1    =[    $painc1,    ogre_painc2    ] {};
  332. void()    ogre_painc2    =[    $painc2,    ogre_painc3    ] {};
  333. void()    ogre_painc3    =[    $painc3,    ogre_painc4    ] {};
  334. void()    ogre_painc4    =[    $painc4,    ogre_painc5    ] {};
  335. void()    ogre_painc5    =[    $painc5,    ogre_painc6    ] {};
  336. void()    ogre_painc6    =[    $painc6,    ogre_run1    ] {};
  337.  
  338.  
  339. void()    ogre_paind1    =[    $paind1,    ogre_paind2    ] {};
  340. void()    ogre_paind2    =[    $paind2,    ogre_paind3    ] {ai_pain(10);};
  341. void()    ogre_paind3    =[    $paind3,    ogre_paind4    ] {ai_pain(9);};
  342. void()    ogre_paind4    =[    $paind4,    ogre_paind5    ] {ai_pain(4);};
  343. void()    ogre_paind5    =[    $paind5,    ogre_paind6    ] {};
  344. void()    ogre_paind6    =[    $paind6,    ogre_paind7    ] {};
  345. void()    ogre_paind7    =[    $paind7,    ogre_paind8    ] {};
  346. void()    ogre_paind8    =[    $paind8,    ogre_paind9    ] {};
  347. void()    ogre_paind9    =[    $paind9,    ogre_paind10    ] {};
  348. void()    ogre_paind10=[    $paind10,    ogre_paind11    ] {};
  349. void()    ogre_paind11=[    $paind11,    ogre_paind12    ] {};
  350. void()    ogre_paind12=[    $paind12,    ogre_paind13    ] {};
  351. void()    ogre_paind13=[    $paind13,    ogre_paind14    ] {};
  352. void()    ogre_paind14=[    $paind14,    ogre_paind15    ] {};
  353. void()    ogre_paind15=[    $paind15,    ogre_paind16    ] {};
  354. void()    ogre_paind16=[    $paind16,    ogre_run1    ] {};
  355.  
  356. void()    ogre_paine1    =[    $paine1,    ogre_paine2    ] {};
  357. void()    ogre_paine2    =[    $paine2,    ogre_paine3    ] {ai_pain(10);};
  358. void()    ogre_paine3    =[    $paine3,    ogre_paine4    ] {ai_pain(9);};
  359. void()    ogre_paine4    =[    $paine4,    ogre_paine5    ] {ai_pain(4);};
  360. void()    ogre_paine5    =[    $paine5,    ogre_paine6    ] {};
  361. void()    ogre_paine6    =[    $paine6,    ogre_paine7    ] {};
  362. void()    ogre_paine7    =[    $paine7,    ogre_paine8    ] {};
  363. void()    ogre_paine8    =[    $paine8,    ogre_paine9    ] {};
  364. void()    ogre_paine9    =[    $paine9,    ogre_paine10    ] {};
  365. void()    ogre_paine10=[    $paine10,    ogre_paine11    ] {};
  366. void()    ogre_paine11=[    $paine11,    ogre_paine12    ] {};
  367. void()    ogre_paine12=[    $paine12,    ogre_paine13    ] {};
  368. void()    ogre_paine13=[    $paine13,    ogre_paine14    ] {};
  369. void()    ogre_paine14=[    $paine14,    ogre_paine15    ] {};
  370. void()    ogre_paine15=[    $paine15,    ogre_run1    ] {};
  371.  
  372.  
  373. void(entity attacker, float damage)    ogre_pain =
  374. {
  375.     local float    r;
  376.  
  377. // don't make multiple pain sounds right after each other
  378.     if (self.pain_finished > time)
  379.         return;
  380.  
  381.     sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);        
  382.  
  383.     r = random();
  384.     
  385.     if (r < 0.25)
  386.     {
  387.         ogre_pain1 ();
  388.         self.pain_finished = time + 1;
  389.     }
  390.     else if (r < 0.5)
  391.     {
  392.         ogre_painb1 ();
  393.         self.pain_finished = time + 1;
  394.     }
  395.     else if (r < 0.75)
  396.     {
  397.         ogre_painc1 ();
  398.         self.pain_finished = time + 1;
  399.     }
  400.     else if (r < 0.88)
  401.     {
  402.         ogre_paind1 ();
  403.         self.pain_finished = time + 2;
  404.     }
  405.     else
  406.     {
  407.         ogre_paine1 ();
  408.         self.pain_finished = time + 2;
  409.     }
  410. };
  411.  
  412. void()    ogre_die1    =[    $death1,    ogre_die2    ] {};
  413. void()    ogre_die2    =[    $death2,    ogre_die3    ] {};
  414. void()    ogre_die3    =[    $death3,    ogre_die4    ]
  415. {self.solid = SOLID_NOT;
  416. self.ammo_rockets = 2;DropBackpack();};
  417. void()    ogre_die4    =[    $death4,    ogre_die5    ] {};
  418. void()    ogre_die5    =[    $death5,    ogre_die6    ] {};
  419. void()    ogre_die6    =[    $death6,    ogre_die7    ] {};
  420. void()    ogre_die7    =[    $death7,    ogre_die8    ] {};
  421. void()    ogre_die8    =[    $death8,    ogre_die9    ] {};
  422. void()    ogre_die9    =[    $death9,    ogre_die10    ] {};
  423. void()    ogre_die10    =[    $death10,    ogre_die11    ] {};
  424. void()    ogre_die11    =[    $death11,    ogre_die12    ] {};
  425. void()    ogre_die12    =[    $death12,    ogre_die13    ] {};
  426. void()    ogre_die13    =[    $death13,    ogre_die14    ] {};
  427. void()    ogre_die14    =[    $death14,    ogre_die14    ] {};
  428.  
  429. void()    ogre_bdie1    =[    $bdeath1,    ogre_bdie2    ] {};
  430. void()    ogre_bdie2    =[    $bdeath2,    ogre_bdie3    ] {ai_forward(5);};
  431. void()    ogre_bdie3    =[    $bdeath3,    ogre_bdie4    ]
  432. {self.solid = SOLID_NOT;
  433. self.ammo_rockets = 2;DropBackpack();};
  434. void()    ogre_bdie4    =[    $bdeath4,    ogre_bdie5    ] {ai_forward(1);};
  435. void()    ogre_bdie5    =[    $bdeath5,    ogre_bdie6    ] {ai_forward(3);};
  436. void()    ogre_bdie6    =[    $bdeath6,    ogre_bdie7    ] {ai_forward(7);};
  437. void()    ogre_bdie7    =[    $bdeath7,    ogre_bdie8    ] {ai_forward(25);};
  438. void()    ogre_bdie8    =[    $bdeath8,    ogre_bdie9    ] {};
  439. void()    ogre_bdie9    =[    $bdeath9,    ogre_bdie10    ] {};
  440. void()    ogre_bdie10    =[    $bdeath10,    ogre_bdie10    ] {};
  441.  
  442. void() ogre_die =
  443. {
  444. // check for gib
  445.     if (self.health < -80)
  446.     {
  447.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  448.         ThrowHead ("progs/h_ogre.mdl", self.health);
  449.         ThrowGib ("progs/gib3.mdl", self.health);
  450.         ThrowGib ("progs/gib3.mdl", self.health);
  451.         ThrowGib ("progs/gib3.mdl", self.health);
  452.         return;
  453.     }
  454.  
  455.     sound (self, CHAN_VOICE, "ogre/ogdth.wav", 1, ATTN_NORM);
  456.     
  457.     if (random() < 0.5)
  458.         ogre_die1 ();
  459.     else
  460.         ogre_bdie1 ();
  461. };
  462.  
  463. void() ogre_melee =
  464. {
  465.     if (random() > 0.5)
  466.         ogre_smash1 ();
  467.     else
  468.         ogre_swing1 ();
  469. };
  470.  
  471.  
  472. /*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 64) Ambush
  473.  
  474. */
  475. void() monster_ogre =
  476. {
  477.     if (deathmatch && deathmatch != 3) // AXXMM
  478. //    if (deathmatch) // Original code
  479.  
  480.     {
  481.         remove(self);
  482.         return;
  483.     }
  484.     precache_model ("progs/ogre.mdl");
  485.     precache_model ("progs/h_ogre.mdl");
  486.     precache_model ("progs/grenade.mdl");
  487.  
  488.     precache_sound ("ogre/ogdrag.wav");
  489.     precache_sound ("ogre/ogdth.wav");
  490.     precache_sound ("ogre/ogidle.wav");
  491.     precache_sound ("ogre/ogidle2.wav");
  492.     precache_sound ("ogre/ogpain1.wav");
  493.     precache_sound ("ogre/ogsawatk.wav");
  494.     precache_sound ("ogre/ogwake.wav");
  495.  
  496.     self.solid = SOLID_SLIDEBOX;
  497.     self.movetype = MOVETYPE_STEP;
  498.  
  499.     setmodel (self, "progs/ogre.mdl");
  500.  
  501.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  502.     self.health = 200;
  503.  
  504.     self.th_stand = ogre_stand1;
  505.     self.th_walk = ogre_walk1;
  506.     self.th_run = ogre_run1;
  507.     self.th_die = ogre_die;
  508.     self.th_melee = ogre_melee;
  509.     self.th_missile = ogre_nail1;
  510.     self.th_pain = ogre_pain;
  511.     
  512.     walkmonster_start();
  513. };
  514.  
  515. void() monster_ogre_marksman =
  516. {
  517.     monster_ogre ();
  518. };
  519.  
  520.  
  521.